home *** CD-ROM | disk | FTP | other *** search
/ PC Media 20 / PC MEDIA CD20.iso / share / prog / asm105 / shd.asm < prev   
Assembly Source File  |  1995-09-14  |  8KB  |  329 lines

  1. ; +---------------------------------------------------------+ ;
  2. ; | Sample program SHD for use with the Magic Assembler | ;
  3. ; +---------------------------------------------------------+ ;
  4.         
  5.         mov     ah,09
  6.         mov     dx,offset(headtxt)
  7.         int     21
  8.         mov     ax,3d00
  9.         mov     dx,offset(pname)
  10.         int     21
  11.         jnc     @15
  12.         xor     al,al
  13.         mov     dx,offset(palerr)
  14.         jmp     error
  15. @15     mov     bx,ax
  16.         mov     ah,3f
  17.         mov     cx,0300
  18.         mov     dx,offset(palette)
  19.         int     21
  20.         mov     ah,3e
  21.         int     21
  22.         cmp     byte [0081],0d
  23.         jne     @1
  24.         xor     al,al
  25.         mov     dx,offset(syntax)
  26.         jmp     error
  27. @1:     mov     si,0082
  28. @2:     lodsb
  29.         cmp     al,0d
  30.         je      @16
  31.         cmp     al,'/'
  32.         je      @16
  33.         jmp     @2
  34. @16:    ds:
  35.         mov     byte [si-01],00
  36.         cmp     al,'/'
  37.         jne     @17
  38.         lodsb
  39.         cmp     al,'I'
  40.         je      @18
  41.         cmp     al,'i'
  42.         je      @18
  43.         jmp     @17
  44. @18:    mov     showit,ff
  45.         pop     ds
  46.         jmp     @19
  47. @17:    push    ds
  48.         push    es
  49.         pop     ds
  50.         mov     showit,00
  51.         pop     ds
  52. @19:    mov     ax,3d00
  53.         mov     dx,0082
  54.         int     21
  55.         jnc     @3
  56.         xor     al,al
  57.         mov     dx,offset(openerr)
  58.         jmp     error
  59. @3:     mov     handle,ax
  60.         mov     bx,ax
  61.         mov     ah,3f
  62.         mov     cx,0003
  63.         mov     dx,offset(header)
  64.         int     21
  65.         mov     si,dx
  66.         mov     di,offset(mheader)
  67.         mov     cx,0003
  68. @4:     cmpsb
  69.         jne     @5
  70.         loop    @4
  71.         jmp     @6
  72. @5:     mov     dx,offset(notdvm)
  73.         mov     al,ff
  74.         jmp     error
  75. @6:     mov     ah,3f
  76.         mov     cx,01
  77.         mov     dx,offset(fullqrt)
  78.         int     21
  79.         cmp     fullqrt,'Q'
  80.         je      @8
  81.         cmp     fullqrt,'F'
  82.         je      @9
  83.         mov     ah,3f
  84.         mov     cx,1
  85.         mov     dx,offset(vs)
  86.         int     21
  87.         cmp     vs,40
  88.         jna     @10
  89.         xor     al,al
  90.         mov     dx,offset(vererr)
  91.         jmp     error
  92. @10:    mov     ah,3f
  93.         mov     cx,0001
  94.         mov     dx,offset(infobyt)
  95.         int     21
  96.         jmp     @11
  97. @8:     mov     infobyt,20
  98.         jmp     @11
  99. @9:     mov     infobyt,a0
  100. @11:    mov     ah,3f
  101.         mov     cx,0002
  102.         mov     dx,offset(dtime)
  103.         int     21
  104.         test    infobyt,08
  105.         jz      @20
  106.         mov     ah,3f
  107.         mov     cx,2
  108.         mov     dx,offset(txtsize)
  109.         int     21
  110.         mov     cx,txtsize
  111. @13:    push    cx
  112.         mov     ah,3f
  113.         mov     cx,1
  114.         mov     dx,offset(cha)
  115.         int     21
  116.         cmp     showit,00
  117.         je      @14
  118.         push    bx
  119.         mov     dl,cha
  120.         mov     ah,02
  121.         int     21
  122.         pop     bx
  123. @14:    pop     cx
  124.         loop    @13
  125.         cmp     showit,00
  126.         je      @20
  127.         xor     ah,ah
  128.         int     16
  129. @20:    mov     ax,0013
  130.         int     10
  131.         mov     ax,0a000
  132.         mov     es,ax
  133.         mov     al,infobyt
  134.         and     al,14
  135.         cmp     al,14
  136.         jne     @22
  137.         mov     stepsiz,08
  138.         mov     palsiz3,06
  139.         mov     linesiz,14
  140.         jmp     @23
  141. @22:    cmp     al,04
  142.         jne     @24
  143.         mov     stepsiz,4
  144.         mov     palsiz3,0c
  145.         mov     linesiz,28
  146.         jmp     @23
  147. @24:    cmp     al,00
  148.         jne     @25
  149.         mov     stepsiz,2
  150.         mov     palsiz3,30
  151.         mov     linesiz,50
  152.         jmp     @23
  153. @25:    mov     stepsiz,1
  154.         mov     palsiz3,0300
  155.         mov     linesiz,00a0
  156. @23:    test    infobyt,40
  157.         jnz     @40
  158.         mov     linesiz,00a0
  159.         mov     to_x,00a0
  160.         mov     stepsiz,01
  161. @40:    test    infobyt,80
  162.         jz      @29
  163.         mov     ax,linesiz
  164.         add     linesiz,ax
  165.         mov     ax,to_x
  166.         add     to_x,ax
  167.         mov     ax,to_y
  168.         add     to_y,ax
  169. @29:    mov     al,infobyt
  170.         and     al,22
  171.         cmp     al,22
  172.         jne     @21
  173.         mov     ah,3f
  174.         mov     cx,palsiz3
  175.         mov     dx,offset(palette)
  176.         int     21
  177. @21:    push    bx
  178.         mov     ax,1012
  179.         xor     bx,bx
  180.         mov     cx,0100
  181.         mov     dx,offset(palette)
  182.         push    es
  183.         push    ds
  184.         pop     es
  185.         int     10
  186.         pop     es
  187.         pop     bx
  188. @26:    mov     al,infobyt
  189.         and     al,22
  190.         cmp     al,20
  191.         jne     @27
  192.         mov     ah,3f
  193.         mov     cx,palsiz3
  194.         mov     dx,offset(palette)
  195.         int     21
  196.         cmp     ax,cx
  197.         je      @37
  198.         jmp     @12
  199. @37:    push    bx
  200.         mov     ax,1012
  201.         xor     bx,bx
  202.         mov     cx,0100
  203.         mov     dx,offset(palette)
  204.         push    es
  205.         push    ds
  206.         pop     es
  207.         int     10
  208.         pop     es
  209.         pop     bx
  210. @27:    xor     di,di
  211.         mov     cx,to_y
  212. @28:    push    cx
  213.         mov     ah,3f
  214.         mov     cx,linesiz
  215.         mov     dx,offset(line)
  216.         int     21
  217.         cmp     cx,ax
  218.         je      @39
  219.         jmp     @12
  220. @39:    mov     cx,to_x
  221.         mov     si,offset(line)
  222. @30:    push    cx
  223.         cmp     stepsiz,01
  224.         jne     @31
  225.         lodsb
  226.         stosb
  227.         jmp     @33
  228. @31:    cmp     stepsiz,02
  229.         jne     @32
  230.         lodsb
  231.         push    ax
  232.         and     al,f0
  233.         mov     cl,04
  234.         shr     al,cl
  235.         stosb
  236.         pop     ax
  237.         and     al,0f
  238.         stosb
  239.         jmp     @33
  240. @32:    cmp     stepsiz,04
  241.         jne     @34
  242.         lodsb
  243.         push    ax
  244.         and     al,c0
  245.         mov     cl,6
  246.         shr     al,cl
  247.         stosb
  248.         pop     ax
  249.         push    ax
  250.         and     al,30
  251.         mov     cl,04
  252.         shr     al,cl
  253.         stosb
  254.         pop     ax
  255.         push    ax
  256.         and     al,0c
  257.         mov     cl,02
  258.         shr     al,cl
  259.         stosb
  260.         pop     ax
  261.         and     al,03
  262.         stosb
  263.         jmp     @33
  264. @34:    mov     cx,08
  265.         lodsb
  266. @35:    push    ax
  267.         dec     cl
  268.         shr     al,cl
  269.         inc     cl
  270.         and     al,1
  271.         stosb
  272.         pop     ax
  273.         loop    @35
  274. @33:    pop     cx
  275.         sub     cx,stepsiz
  276.         cmp     cx,0
  277.         jne     @30
  278.         cmp     to_x,00a0
  279.         jne     @36
  280.         add     di,00a0
  281. @36:    pop     cx
  282.         loop    @38
  283.         jmp     @26
  284. @38:    jmp     @28
  285. @12:    mov     ah,3e
  286.         int     21
  287.         xor     ah,ah
  288.         int     16
  289.         mov     ax,0003
  290.         int     10
  291.         mov     ax,4c00
  292.         int     21
  293.  
  294. error:  xor     al,al
  295.         je      @7
  296.         mov     ah,3e
  297.         int     21
  298. @7:     mov     ah,09
  299.         int     21
  300.         mov     ah,4c
  301.         int     21
  302.  
  303. headtxt db      'Show DVM - Written by Bert Greevenbosch for Magic Software' 0a 0d 'Public Domain Version' 0a 0d 'Last possible DVM version: 4.0' 0a 0d '$'
  304. openerr db      'Error opening file' 0a 0d '$'
  305. vererr  db      'Cannot display this version' 0a 0d '$'
  306. mheader db      'DVM'
  307. notdvm  db      'Not a DVM' 0a 0d '$'
  308. palerr  db      'Cannot open DVMPAL.BIN' 0a 0d '$'
  309. pname   db      'DVMPAL.BIN' 00
  310. syntax  db      'Syntax: SDA [Filename.DVM][/I]' 0a 0d '$'
  311. to_x    dw      00a0
  312. to_y    dw      0064
  313. -
  314. cha     db      ?
  315. dtime   dw      ?
  316. header  ds      3
  317. fullqrt db      ?
  318. handle  dw      ?
  319. infobyt db      ?
  320. line    ds      140
  321. linesiz dw      ?
  322. stepsiz dw      ?
  323. palette ds      300
  324. parseg  dw      ?
  325. palsiz3 dw      ?
  326. showit  db      ?
  327. txtsize dw      ?
  328. vs      db      ?
  329.